// loash 是一个纯函数的功能库
// 数组的slice 和 splice 分别是： 纯函数和不纯的函数
// slice： 返回数组中的指定部分，不改变原来数组
// splice： 对数组操作返回改数组，会改变原来的数组

let number = [1, 2, 3, 4, 5]
//纯函数
console.log(number.slice(0, 3));
console.log(number.slice(0, 3));
console.log(number.slice(0, 3));

// 不纯的函数
console.log(number.splice(0, 3));
console.log(number.splice(0, 3));
console.log(number.splice(0, 3));

const _ = require('lodash')

// function getArea(r) {
//     return Math.PI * r * r
// }

// let getAreaWithMemory = _.memoize(getArea)
// console.log(getAreaWithMemory(4))

// 模拟一个memoize函数
function memoize(f) {
    let cache = {}
    return function() {
        let arg_str = JSON.stringify(arguments)
        cache[arg_str] = cache[arg_str] || f.apply(f, arguments)
        return cache[arg_str]
    }
}
